home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!decwrl!elroy.jpl.nasa.gov!lll-winken!sun-barr!newstop!sun!parc.xerox.com
- From: jgoldman@parc.xerox.com (Jonny Goldman)
- Newsgroups: comp.sources.x
- Subject: v08i068: xinvaders -- space invaders for X, Patch1, Part01/01
- Message-ID: <140487@sun.Eng.Sun.COM>
- Date: 10 Aug 90 18:27:22 GMT
- Sender: news@sun.Eng.Sun.COM
- Lines: 543
- Approved: argv@sun.com
-
- Submitted-by: Jonny Goldman <jgoldman@parc.xerox.com>
- Posting-number: Volume 8, Issue 68
- Archive-name: xinvaders/patch1
- Patch-To: xinvaders: Volume 8, Issue 62-66
-
- Here's the first round of patches to the game. They aren't really
- bug-fixes, but rather small enhancements. There are basically three
- patches:
-
- 1. To allow users to compile with X11R3
- 2. expanding the images of the invaders by 1 bit and eliminating the erase
- to improve performance (thus allowing it to run on slower machines, like
- Sun 3's).
- 3. To allow the specification of a bitmap directory in the Xresources.
- For example:
-
- Vaders*BitmapDirectory: /usr/local/xgames/xinvaders/
-
- The trailing `/' is important, and `"' should not be used (unless you
- really mean it).
-
- The files that have changed are:
-
- diff -c xinvaders.old/Makefile xinvaders/Makefile
- diff -c xinvaders.old/base.c xinvaders/base.c
- diff -c xinvaders.old/main.c xinvaders/main.c
- diff -c xinvaders.old/patchlevel.h xinvaders/patchlevel.h
- diff -c xinvaders.old/shot.c xinvaders/shot.c
- diff -c xinvaders.old/spacers.c xinvaders/spacers.c
- diff -c xinvaders.old/vader1a.bit xinvaders/vader1a.bit
- diff -c xinvaders.old/vader1b.bit xinvaders/vader1b.bit
- diff -c xinvaders.old/vader2a.bit xinvaders/vader2a.bit
- diff -c xinvaders.old/vader2b.bit xinvaders/vader2b.bit
- diff -c xinvaders.old/vader3a.bit xinvaders/vader3a.bit
- diff -c xinvaders.old/vader3b.bit xinvaders/vader3b.bit
- diff -c xinvaders.old/vaders.c xinvaders/vaders.c
- diff -c xinvaders.old/vaders.h xinvaders/vaders.h
- diff -c xinvaders.old/widget.c xinvaders/widget.c
- diff -c xinvaders.old/xinvaders.ma xinvaders/xinvaders.ma
-
- It looks like the whole thing, but it's really only minor stuff. Here's
- the entire context diff:
-
- -------------------------Cut Here and use patch----------------------------
-
- diff -c xinvaders.old/Makefile xinvaders/Makefile
- *** xinvaders.old/Makefile Wed Aug 1 13:42:33 1990
- --- xinvaders/Makefile Tue Aug 7 10:29:23 1990
- ***************
- *** 1,6 ****
- ! CFLAGS = -g -I/import/X11R4/include -L/import/X11R4/lib
-
- ! CC = cc
-
- LIBS = -lXaw -lXt -lXmu -lX11
-
- --- 1,9 ----
- ! # this is for my particular setup
- ! CFLAGS = -O -I/import/X11R4/include -L/import/X11R4/lib
- ! # if you're using X11/R3, add this define
- ! #CFLAGS = -DX11R3
-
- ! CC = cc
-
- LIBS = -lXaw -lXt -lXmu -lX11
-
- diff -c xinvaders.old/base.c xinvaders/base.c
- *** xinvaders.old/base.c Wed Aug 1 13:14:39 1990
- --- xinvaders/base.c Tue Aug 7 11:16:08 1990
- ***************
- *** 46,55 ****
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! char *data;
- int i, status;
-
- ! status = XmuReadBitmapDataFromFile ("base.bit",
- &width, &height, &data,
- &x_hot, &y_hot);
-
- --- 46,57 ----
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! char *data, filename[255];
- int i, status;
-
- ! sprintf(filename, "%sbase.bit", bitdir);
- !
- ! status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
-
- ***************
- *** 69,75 ****
- base->shape_image->bitmap_bit_order = LSBFirst;
- base->shape_image->byte_order = LSBFirst;
-
- ! status = XmuReadBitmapDataFromFile ("explode.bit",
- &width, &height, &data,
- &x_hot, &y_hot);
-
- --- 71,79 ----
- base->shape_image->bitmap_bit_order = LSBFirst;
- base->shape_image->byte_order = LSBFirst;
-
- ! sprintf(filename, "%sexplode.bit", bitdir);
- !
- ! status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
-
- diff -c xinvaders.old/main.c xinvaders/main.c
- *** xinvaders.old/main.c Sun Aug 5 01:58:09 1990
- --- xinvaders/main.c Tue Aug 7 11:07:26 1990
- ***************
- *** 15,23 ****
-
- #define MAIN
- #include "vaders.h"
- #include <X11/Xaw/Label.h>
- #include <X11/Xaw/Paned.h>
- !
- static int width, height; /* Size of window. */
-
- static XrmOptionDescRec table[] = {
- --- 15,28 ----
-
- #define MAIN
- #include "vaders.h"
- + #ifndef X11R3
- #include <X11/Xaw/Label.h>
- #include <X11/Xaw/Paned.h>
- ! #else
- ! #include <X11/IntrinsicP.h>
- ! #include <X11/Label.h>
- ! #include <X11/VPaned.h>
- ! #endif
- static int width, height; /* Size of window. */
-
- static XrmOptionDescRec table[] = {
- ***************
- *** 31,36 ****
- --- 36,43 ----
- (Cardinal)&height, XtRImmediate, (caddr_t) VHEIGHT},
- {"debug", "Debug", XtRBoolean, sizeof(Boolean),
- (Cardinal)&debug, XtRString, "off"},
- + {"bitdir", "BitmapDirectory", XtRString, sizeof(String),
- + (Cardinal)&bitdir, XtRString, (String)"./"},
- {"basewait", "BaseWait", XtRInt, sizeof(int),
- (Cardinal)&basewait, XtRImmediate, (caddr_t) 10},
- {"vaderwait", "VaderWait", XtRInt, sizeof(int),
- ***************
- *** 135,149 ****
- height = VHEIGHT;
- args[0].value = (XtArgVal) width;
- args[1].value = (XtArgVal) height;
- pane = XtCreateWidget("pane", panedWidgetClass, toplevel,
- args, XtNumber(args));
- XtManageChild(pane);
- - scoreargs[0].value = (XtArgVal) scorepixel;
- - scorewidget = XtCreateWidget("score", labelWidgetClass, pane,
- - scoreargs, XtNumber(scoreargs));
- - /*
- - XtManageChild(scorewidget);
- - */
- gamewidget = (VadersWidget)
- XtCreateWidget("field", vadersWidgetClass, pane, NULL, 0);
- XtManageChild(gamewidget);
- --- 142,155 ----
- height = VHEIGHT;
- args[0].value = (XtArgVal) width;
- args[1].value = (XtArgVal) height;
- + #ifndef X11R3
- pane = XtCreateWidget("pane", panedWidgetClass, toplevel,
- args, XtNumber(args));
- + #else
- + pane = XtCreateWidget("pane", vPanedWidgetClass, toplevel,
- + args, XtNumber(args));
- + #endif
- XtManageChild(pane);
- gamewidget = (VadersWidget)
- XtCreateWidget("field", vadersWidgetClass, pane, NULL, 0);
- XtManageChild(gamewidget);
-
- diff -c xinvaders.old/patchlevel.h xinvaders/patchlevel.h
- *** xinvaders.old/patchlevel.h Wed Aug 1 13:28:33 1990
- --- xinvaders/patchlevel.h Tue Aug 7 11:24:58 1990
- ***************
- *** 13,16 ****
-
- /* patchlevel.h -- patchlevel for xinvaders */
-
- ! #define PATCHLEVEL 0
- --- 13,23 ----
-
- /* patchlevel.h -- patchlevel for xinvaders */
-
- ! #define PATCHLEVEL 1
- !
- ! /*
- ! added patches for X11R3 - from duncan@mips.com
- ! quicker vader updating - from koreth@ebay.sun.com
- ! and bitdir - the BitmapDirectory resource, courtesy of me.
- ! Tue Aug 7 1990
- ! */
-
- diff -c xinvaders.old/shot.c xinvaders/shot.c
- *** xinvaders.old/shot.c Tue Jul 17 14:17:09 1990
- --- xinvaders/shot.c Tue Aug 7 10:52:27 1990
- ***************
- *** 202,212 ****
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! char *data, filename[30];
- int i, status;
-
- for (i = 0; i < 2; i++) {
- ! sprintf(filename, "sperm%s.bit", (i ? "b" : "a"));
- status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
- --- 202,212 ----
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! char *data, filename[255];
- int i, status;
-
- for (i = 0; i < 2; i++) {
- ! sprintf(filename, "%ssperm%s.bit", bitdir, (i ? "b" : "a"));
- status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
-
- diff -c xinvaders.old/spacers.c xinvaders/spacers.c
- *** xinvaders.old/spacers.c Tue Jul 17 14:17:20 1990
- --- xinvaders/spacers.c Tue Aug 7 10:53:01 1990
- ***************
- *** 139,148 ****
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! unsigned char *data;
- int status;
-
- ! status = XmuReadBitmapDataFromFile ("spacer.bit",
- &width, &height, &data,
- &x_hot, &y_hot);
- if (status != BitmapSuccess) return status;
- --- 139,150 ----
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! unsigned char *data, filename[255];
- int status;
-
- ! sprintf(filename, "%sspacer.bit", bitdir);
- !
- ! status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
- if (status != BitmapSuccess) return status;
-
- diff -c xinvaders.old/vader1a.bit xinvaders/vader1a.bit
- *** xinvaders.old/vader1a.bit Fri Jul 13 10:04:15 1990
- --- xinvaders/vader1a.bit Tue Aug 7 10:02:35 1990
- ***************
- *** 1,4 ****
- ! #define vader1a_width 8
- #define vader1a_height 8
- static char vader1a_bits[] = {
- ! 0x18, 0x3c, 0x7e, 0xdb, 0xff, 0x5a, 0x81, 0x42};
- --- 1,5 ----
- ! #define vader1a_width 10
- #define vader1a_height 8
- static char vader1a_bits[] = {
- ! 0x30, 0x00, 0x78, 0x00, 0xfc, 0x00, 0xb6, 0x01, 0xfe, 0x01, 0xb4, 0x00,
- ! 0x02, 0x01, 0x84, 0x00};
- diff -c xinvaders.old/vader1b.bit xinvaders/vader1b.bit
- *** xinvaders.old/vader1b.bit Fri Jul 13 10:08:36 1990
- --- xinvaders/vader1b.bit Tue Aug 7 10:02:35 1990
- ***************
- *** 1,4 ****
- ! #define vader1b_width 8
- #define vader1b_height 8
- static char vader1b_bits[] = {
- ! 0x18, 0x3c, 0x7e, 0xdb, 0xff, 0x5a, 0x24, 0x42};
- --- 1,5 ----
- ! #define vader1b_width 10
- #define vader1b_height 8
- static char vader1b_bits[] = {
- ! 0x30, 0x00, 0x78, 0x00, 0xfc, 0x00, 0xb6, 0x01, 0xfe, 0x01, 0xb4, 0x00,
- ! 0x48, 0x00, 0x84, 0x00};
- diff -c xinvaders.old/vader2a.bit xinvaders/vader2a.bit
- *** xinvaders.old/vader2a.bit Fri Jul 13 10:08:53 1990
- --- xinvaders/vader2a.bit Tue Aug 7 10:02:35 1990
- ***************
- *** 1,5 ****
- ! #define vader2a_width 10
- #define vader2a_height 8
- static char vader2a_bits[] = {
- ! 0x84, 0x00, 0x48, 0x00, 0xfc, 0x00, 0xb6, 0x01, 0xff, 0x03, 0xfd, 0x02,
- ! 0x85, 0x02, 0x48, 0x00};
- --- 1,5 ----
- ! #define vader2a_width 12
- #define vader2a_height 8
- static char vader2a_bits[] = {
- ! 0x08, 0x01, 0x90, 0x00, 0xf8, 0x01, 0x6c, 0x03, 0xfe, 0x07, 0xfa, 0x05,
- ! 0x0a, 0x05, 0x90, 0x00};
- diff -c xinvaders.old/vader2b.bit xinvaders/vader2b.bit
- *** xinvaders.old/vader2b.bit Fri Jul 13 10:09:04 1990
- --- xinvaders/vader2b.bit Tue Aug 7 10:02:36 1990
- ***************
- *** 1,5 ****
- ! #define vader2b_width 10
- #define vader2b_height 8
- static char vader2b_bits[] = {
- ! 0x84, 0x00, 0x49, 0x02, 0xfd, 0x02, 0xb7, 0x03, 0xfe, 0x01, 0xfc, 0x00,
- ! 0x84, 0x00, 0x02, 0x01};
- --- 1,5 ----
- ! #define vader2b_width 12
- #define vader2b_height 8
- static char vader2b_bits[] = {
- ! 0x08, 0x01, 0x92, 0x04, 0xfa, 0x05, 0x6e, 0x07, 0xfc, 0x03, 0xf8, 0x01,
- ! 0x08, 0x01, 0x04, 0x02};
- diff -c xinvaders.old/vader3a.bit xinvaders/vader3a.bit
- *** xinvaders.old/vader3a.bit Fri Jul 13 10:09:54 1990
- --- xinvaders/vader3a.bit Tue Aug 7 10:02:36 1990
- ***************
- *** 1,5 ****
- ! #define vader3a_width 12
- #define vader3a_height 8
- static char vader3a_bits[] = {
- ! 0xf0, 0x00, 0xfe, 0x07, 0xff, 0x0f, 0x67, 0x0e, 0xff, 0x0f, 0x9c, 0x03,
- ! 0x66, 0x06, 0x0c, 0x03};
- --- 1,5 ----
- ! #define vader3a_width 14
- #define vader3a_height 8
- static char vader3a_bits[] = {
- ! 0xe0, 0x01, 0xfc, 0x0f, 0xfe, 0x1f, 0xce, 0x1c, 0xfe, 0x1f, 0x38, 0x07,
- ! 0xcc, 0x0c, 0x18, 0x06};
- diff -c xinvaders.old/vader3b.bit xinvaders/vader3b.bit
- *** xinvaders.old/vader3b.bit Fri Jul 13 10:09:36 1990
- --- xinvaders/vader3b.bit Tue Aug 7 10:02:36 1990
- ***************
- *** 1,5 ****
- ! #define vader3b_width 12
- #define vader3b_height 8
- static char vader3b_bits[] = {
- ! 0xf0, 0x00, 0xfe, 0x07, 0xff, 0x0f, 0x67, 0x0e, 0xff, 0x0f, 0x9c, 0x03,
- ! 0x66, 0x06, 0x03, 0x0c};
- --- 1,5 ----
- ! #define vader3b_width 14
- #define vader3b_height 8
- static char vader3b_bits[] = {
- ! 0xe0, 0x01, 0xfc, 0x0f, 0xfe, 0x1f, 0xce, 0x1c, 0xfe, 0x1f, 0x38, 0x07,
- ! 0xcc, 0x0c, 0x06, 0x18};
- diff -c xinvaders.old/vaders.c xinvaders/vaders.c
- *** xinvaders.old/vaders.c Tue Jul 17 14:16:44 1990
- --- xinvaders/vaders.c Tue Aug 7 10:53:25 1990
- ***************
- *** 54,68 ****
-
- extern Base base;
-
- #define PointInVader(vader, x, y) \
- ! (x >= (vader)->x && y >= (vader)->y && \
- ! x <= (vader)->x + (vader)->width && y <= (vader)->y + (vader)->height)
-
- - #define VaderNearBox(vader, minx, miny, maxx, maxy) \
- - ((vader)->x <= minx && maxx <= (vader)->x + (vader)->width && \
- - (vader)->y <= miny && maxy <= (vader)->y + (vader)->height)
- -
- -
- static void PaintVader(vader, gc)
- Vader vader;
- GC gc;
- --- 54,66 ----
-
- extern Base base;
-
- + /* indicates pad around vader bitmap for better collision detection */
- + #define VADERPAD 1
- +
- #define PointInVader(vader, x, y) \
- ! (x >= (vader)->x+VADERPAD && y >= (vader)->y && \
- ! x <= (vader)->x + (vader)->width-VADERPAD && y <= (vader)->y + (vader)->height)
-
- static void PaintVader(vader, gc)
- Vader vader;
- GC gc;
- ***************
- *** 187,193 ****
- ShotHitsBuilding(vader->x+vader->width, vader->y+vader->height);
- else
- ShotHitsBuilding(vader->x, vader->y+vader->height);
- - PaintVader(vader, backgc);
- vader->x += vader->vx;
- if ((vader->x < (VADERWIDTH-vader->width)/2 && vader->vx < 0) ||
- (vader->x > gamewidth-VADERWIDTH && vader->vx > 0))
- --- 185,190 ----
- ***************
- *** 222,233 ****
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! char *data, filename[30];
- int i, j, status;
-
- for (i = 0; i < NUMTYPES; i++)
- for (j = 0; j < 2; j++) {
- ! sprintf(filename, "vader%d%s.bit", (i+1), (j ? "b" : "a"));
- status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
- --- 219,230 ----
- {
- unsigned int width, height;
- int x_hot, y_hot;
- ! char *data, filename[255];
- int i, j, status;
-
- for (i = 0; i < NUMTYPES; i++)
- for (j = 0; j < 2; j++) {
- ! sprintf(filename, "%svader%d%s.bit", bitdir, (i+1), (j ? "b" : "a"));
- status = XmuReadBitmapDataFromFile (filename,
- &width, &height, &data,
- &x_hot, &y_hot);
-
- diff -c xinvaders.old/vaders.h xinvaders/vaders.h
- *** xinvaders.old/vaders.h Wed Aug 1 11:27:28 1990
- --- xinvaders/vaders.h Tue Aug 7 10:47:43 1990
- ***************
- *** 86,91 ****
- --- 86,93 ----
- * Actual vaders definitions.
- */
-
- + ext char *bitdir;
- +
- ext Boolean debug;
- ext int level;
-
- ***************
- *** 93,99 ****
- ext Window gamewindow;
- ext VadersWidget gamewidget;
- ext int gamewidth, gameheight;
- ! ext Widget toplevel, scorewidget;
- ext int score;
- ext int basesleft;
-
- --- 95,101 ----
- ext Window gamewindow;
- ext VadersWidget gamewidget;
- ext int gamewidth, gameheight;
- ! ext Widget toplevel;
- ext int score;
- ext int basesleft;
-
- diff -c xinvaders.old/widget.c xinvaders/widget.c
- *** xinvaders.old/widget.c Wed Aug 1 11:27:35 1990
- --- xinvaders/widget.c Tue Aug 7 10:12:41 1990
- ***************
- *** 14,20 ****
- --- 14,24 ----
- /* widget.c -- handle things that make the playing field behave as a widget. */
-
- #include "vaders.h"
- + #ifndef X11R3
- #include <X11/Xaw/Paned.h>
- + #else
- + #include <X11/VPaned.h>
- + #endif
-
- typedef struct _BaseRec {
- int x; /* Location. */
-
- diff -c xinvaders.old/xinvaders.ma xinvaders/xinvaders.ma
- *** xinvaders.old/xinvaders.ma Wed Aug 1 12:33:15 1990
- --- xinvaders/xinvaders.ma Tue Aug 7 11:18:20 1990
- ***************
- *** 1,5 ****
- .\" Man page for xinvaders, by Jonny Goldman.
- ! .TH XInvaders 1 "Jul 17 1990"
- .SH NAME
- \fIXInvaders\fR \- Shoot-em-up them nasty little bugs.
- .SH SYNOPSIS
- --- 1,5 ----
- .\" Man page for xinvaders, by Jonny Goldman.
- ! .TH XInvaders 1.1 "Aug 7 1990"
- .SH NAME
- \fIXInvaders\fR \- Shoot-em-up them nasty little bugs.
- .SH SYNOPSIS
- ***************
- *** 10,15 ****
- --- 10,18 ----
- is an implementation of the old Atari Space Invaders game, on top of the
- X11 window system.
-
- + .SH PATCH LEVEL
- + xinvaders is now at Patch Level 1
- +
- .SH PLAYING XINVADERS
- The game will start with all the invaders drawn. Press 'p' to play, and
- you're off.
- ***************
- *** 114,119 ****
- --- 117,123 ----
- Here's an example of some of the resources you can set (this would be in
- your .Xdefaults file):
-
- + Vaders*BitmapDirectory: ./
- Vaders*defaultfore: black
- Vaders*defaultback: white
- Vaders*Vader1Color: blue
- ***************
- *** 144,152 ****
- .SH BUGS
-
- The buildings aren't as good as the arcade, but hey, whatdayawant for free?
- ! You also must be in the same directory as the executable for the images to
- ! load properly. It also doesn't handle auto-repeat very well, so you should
- ! probably turn it off.
-
- .SH COPYRIGHT
-
- --- 148,155 ----
- .SH BUGS
-
- The buildings aren't as good as the arcade, but hey, whatdayawant for free?
- ! It also doesn't handle auto-repeat very well, so you should probably turn
- ! it off.
-
- .SH COPYRIGHT
-
- dan
- ----------------------------------------------------
- O'Reilly && Associates argv@sun.com / argv@ora.com
- Opinions expressed reflect those of the author only.
-